<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Language" content="zh-CN"><link href="stylesheet.css" media="all" rel="stylesheet" type="text/css">
<title>权限</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head><body class="SECT1">
<div>
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><th colspan="5" align="center" valign="bottom">PostgreSQL 8.2.3 中文文档</th></tr>
<tr><td width="10%" align="left" valign="top"><a href="ddl-alter.html" accesskey="P">后退</a></td><td width="10%" align="left" valign="top"><a href="ddl.html">快退</a></td><td width="60%" align="center" valign="bottom">章5. 数据定义</td><td width="10%" align="right" valign="top"><a href="ddl.html">快进</a></td><td width="10%" align="right" valign="top"><a href="ddl-schemas.html" accesskey="N">前进</a></td></tr>
</table>
<hr align="LEFT" width="100%"></div>
<div class="SECT1"><h1 class="SECT1"><a name="DDL-PRIV">5.6. 权限</a></h1><a name="AEN2362"></a><a name="AEN2364"></a>
<p>如果你创建了一个数据库对象，那么你就成为它的所有者。缺省时，只有对象的所有者可以在对象上做任何事情。为了允许其它用户使用它，我们必须赋予他们<i class="FIRSTTERM">权限</i>。不过超级用户总是可以操作任何对象。</p>
<p>有好多种不同的权限：<tt class="LITERAL">SELECT</tt>, <tt class="LITERAL">INSERT</tt>, <tt class="LITERAL">UPDATE</tt>, <tt class="LITERAL">DELETE</tt>, <tt class="LITERAL">REFERENCES</tt>, <tt class="LITERAL">TRIGGER</tt>, <tt class="LITERAL">CREATE</tt>, <tt class="LITERAL">CONNECT</tt>, <tt class="LITERAL">TEMPORARY</tt>, <tt class="LITERAL">EXECUTE</tt>, <tt class="LITERAL">USAGE</tt> 。适用于特定对象的权限因对象类型(表/函数等)不同而不同。有关 PostgreSQL 所支持的不同类型的权限的完整信息，请参考 <a href="sql-grant.html"><i>GRANT</i></a> 的手册页。下面的章节将为你展示如何利用这些权限。</p>
<p>修改或者删除一个对象的权限永远是所有者独有的权限。</p>
<div class="NOTE">
<blockquote class="NOTE">
<p><b>【注意】</b>要改变一个表、索引、序列、或者视图的所有者，使用 <a href="sql-altertable.html"><i>ALTER TABLE</i></a> 命令，以及对应其它对象类型的 <tt class="LITERAL">ALTER</tt> 命令。</p>
</blockquote>
</div>
<p>使用 <tt class="COMMAND">GRANT</tt> 命令赋予权限。因此，如果 <tt class="LITERAL">joe</tt> 是一个已经存在的用户，而 <tt class="LITERAL">accounts</tt> 是一个已经存在的表，更新表的权限可以用下面的命令赋予：</p>
<pre class="PROGRAMLISTING">GRANT UPDATE ON accounts TO joe;</pre>
<p>在权限的位置写上 <tt class="LITERAL">ALL</tt> 则赋予所有与该对象类型相关的权限。</p>
<p>名为 <tt class="LITERAL">PUBLIC</tt> 的特殊"用户"可以用于将权限赋予系统中的所有用户。另外，还可以使用"组"角色来帮助管理一群用户的权限，细节可参见<a href="user-manag.html">章18</a>。</p>
<p>可以使用 <tt class="COMMAND">REVOKE</tt> 命令撤销权限：</p>
<pre class="PROGRAMLISTING">REVOKE ALL ON accounts FROM PUBLIC;</pre>
<p>对象所有者的特殊权限(也就是 <tt class="COMMAND">DROP</tt>, <tt class="COMMAND">GRANT</tt>, <tt class="COMMAND">REVOKE</tt> 等权限)总是隐含地属于所有者，并且不能赋予或者撤销。但是对象所有者可以选择撤销自己的普通权限，比如把一个表做成对自己和别人都是只读的。</p>
<p>最初，只有对象所有者(或者超级用户)可以赋予或者撤销对象的权限。但是，我们可以赋予一个"with grant option"权限，这样就允许接受权限的人将该权限转授他人。如果授权选项后来被撤销，那么所有那些从这个接受者接受了权限的用户(直接或间级)都将失去该权限。细节详见 <a href="sql-grant.html"><i>GRANT</i></a> 和 <a href="sql-revoke.html"><i>REVOKE</i></a> 手册页。</p>
</div>
<div>
<hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="33%" align="left" valign="top"><a href="ddl-alter.html" accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">首页</a></td><td width="33%" align="right" valign="top"><a href="ddl-schemas.html" accesskey="N">前进</a></td></tr>
<tr><td width="33%" align="left" valign="top">修改表</td><td width="34%" align="center" valign="top"><a href="ddl.html" accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">模式</td></tr>
</table>
</div>
</body></html>